package com.tom.architect.day18.simple3.bottomtab;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;

import com.tom.architect.day18.simple3.bottomtab.iterator.TabIterator;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.Nullable;

// 底部的导航栏
public class TabBottomNavigation extends LinearLayout {
    private List<BottomTabItem> mTabItems;
    private int mCurrentIndex = -1; // 记录位置

    public TabBottomNavigation(Context context) {
        this(context, null);
    }

    public TabBottomNavigation(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TabBottomNavigation(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOrientation(HORIZONTAL);
        mTabItems = new ArrayList<>();
    }

    //    public void addTabItem(List<BottomTabItem> tabItems) {
    public void addTabItem(TabIterator tabIterator) {
        mTabItems.clear();
        int index = 0; // 当前的位置
        while (tabIterator.hasNext()) { // 使用迭代器：判断是否还有元素
            BottomTabItem tabItem = tabIterator.next();
            View tabView = tabItem.getTabView();
            addView(tabView);
            mTabItems.add(tabItem);

            LinearLayout.LayoutParams lp = (LayoutParams) tabView.getLayoutParams();
            lp.weight = 1;
            lp.gravity = Gravity.CENTER;
            tabView.setLayoutParams(lp);
            // 点击事件
            setItemClickListener(tabView, index++);
        }
        // 第一个item默认选中。
        mTabItems.get(0).setSelected(true);
        mCurrentIndex = 0;
    }

    private void setItemClickListener(View tabView, int position) {
        tabView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 位置发生了改变, 选中状态变化。
                if (mCurrentIndex != position) {
                    mTabItems.get(mCurrentIndex).setSelected(false); // 原选中的 变成非选中
                    mTabItems.get(position).setSelected(true); // 当前设置为选中
                    mCurrentIndex = position;
                    // TODO :点击的位置，用接口Callback回调出去，供外部Activity使用。调整Tab显示。
                }
            }
        });
    }

}
